package thinker.miracle.business.common.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import thinker.miracle.business.common.dao.OptionTypeDao;
import thinker.miracle.business.common.entity.OptionTypeEntity;
import thinker.miracle.commons.ECache;


/**
 * @author bo.chen
 *
 */
@Service
public class OptionTypeService {
	
	@Autowired
	OptionTypeDao optionTypeDao;

	/**
	 * 根据编码获取选项
	 * @return
	 * 
	 * 缓存一天
	 */
	@Cacheable(value=ECache.CACHE_ONE_DAY,key="#optioneTypeNo,#root.methodNam",unless="#result==null")
	public List<OptionTypeEntity> getByOptionTypeNo(String optioneTypeNo){
		if(optioneTypeNo == null || "".equals(optioneTypeNo))
			throw new RuntimeException("optionTypeNo can not be null");
		return optionTypeDao.findByOptionTypeNoAndIsUse(optioneTypeNo,"1");
	}
	
	/**
	 * 根据名称查询
	 * 
	 * @param optioneType
	 * @return
	 * 
	 * 缓存一天
	 */
	@Cacheable(value=ECache.CACHE_ONE_DAY,key="#optioneType,#root.methodName",unless="#result==null")
	public List<OptionTypeEntity> getByOptionType(String optioneType){
		if(optioneType == null || "".equals(optioneType))
			throw new RuntimeException("optioneType can not be null");
		return optionTypeDao.findByOptionTypeAndIsUse(optioneType,"1");
	}
	
	/**
	 * 查询具体选项
	 * 
	 * @param optionTypeNo
	 * @param optionNo
	 * @return
	 * 
	 * 缓存一天
	 */
	@Cacheable(value=ECache.CACHE_ONE_DAY,key="#optionTypeNo,#optionNo,#root.methodNam",unless="#result==null")
	public OptionTypeEntity getByOptionTypeNoAndOptionNo(String optionTypeNo,String optionNo){
		if(optionTypeNo == null || "".equals(optionTypeNo))
			throw new RuntimeException("optionTypeNo can not be null");
		if(optionNo == null || "".equals(optionNo))
			throw new RuntimeException("optionNo can not be null");
		List<OptionTypeEntity> optionTypes = optionTypeDao.findByOptionTypeNoAndOptionNoAndIsUse(optionTypeNo,optionNo,"1");
		if(optionTypes != null && optionTypes.size()>0){
			return optionTypes.get(0);
		}
		return null;
	}
}